Wear leveling may be performed on non-volatile memory to improve the durability of the non-volatile memory and to prolong the service time of the non-volatile memory. For example, the non-volatile memory may store data in multiple blocks. Each of the blocks may tolerate a certain number of program cycles when storing data from the write operations to the block before the data storage capability of the block becomes unreliable.
If a particular block of the non-volatile memory frequently receives write operations to store data at the block while other blocks of the non-volatile memory do not receive such frequent write operations, then data storage capability of the block may become unreliable more quickly than the data storage capabilities of the other blocks of the non-volatile memory. Wear leveling may be performed to move the data of the block to another block associated with fewer write operations so that subsequent write operations may perform subsequent program cycles to the other block with fewer write operations.